/* **************************************************************************/
/*COPYRIGHT CCWIN-IN ALL RIGHTS RESERVED. THIS IS AN UNPUBLISHED WORK.      */
/*V8:ConvertMode=Report                                                     */
/*V8:WebEnabled=Yes                                                         */
/*V8:RunMode=Character,Windows                                              */
/*EXTRACTING DATA FROM MFG/PRO                                              */
/****************************************************************************/
/* PROCEDURE NAME        : xxpodetexptapi.p                                 */
/* PROCEDURE TYPE        : Export Data API Export Process                   */
/* DESCRIPTION           : Po export Process                                */
/*                                                                          */     
/* INCLUDE FILES         :                                                  */
/* CALLED BY             :                                                  */
/* CALLED PROCEDURES     :                                                  */
/****************************************************************************/
/* CREATED BY            : Gaoyan                                27-Jul-24  */
/****************************************************************************/ 
/****************************************************************************/
/****************************************************************************/

{us/mf/mfdtitle.i}
{us/bbi/gplabel.i}
{us/wb/wbrp01.i}
{xxjson.i}
{xxcimload.i}

&SCOPED-DEFINE TimeStamp1 substring(string(year(today), "9999"),3) + string(month(today), "99") + string(day(today), "99")
&SCOPED-DEFINE TimeStamp2 substring(string(time, "HH:MM:SS"), 1, 2) + substring(string(time, "HH:MM:SS"), 4, 2) + substring(string(time, "HH:MM:SS"), 7, 2)

define input parameter vc_inputjson             as character format "x(60)" no-undo.
define input parameter vc_outputjson            as character format "x(60)" no-undo.
define input parameter vc_import                as logical  no-undo.


DEFINE VARIABLE li_access           AS    INTEGER                       NO-UNDO.
define variable l_file                       as character format "x(40)" no-undo.
define variable l_line                       as character   no-undo.
define variable lvi_row_id                   as decimal     no-undo.
define variable v_import                     as logical     init   "no"      no-undo.
define variable v_site                       like si_site   no-undo.

define variable l_error                      as character      no-undo.
define stream f_log.
define stream f_cim.
define variable v_quote               as character initial """"   no-undo.
define variable v_default             as character initial "-"    no-undo.
define variable v_space               as character initial " "    no-undo.
define variable v_log                 as character                no-undo.
define variable v_cim                 as character                no-undo.
define variable v_fline               as character                no-undo.
define variable v_errorstatus         as logical                  no-undo.
define variable v_toterrorstatus      as logical initial yes      no-undo.
define variable v_errstring           as character                no-undo.
define variable v_status              as character                no-undo.

define variable v_entity              like si_entity              no-undo.
define variable v_ee                  as logic                    no-undo.

define variable vi_filecount          as integer                  no-undo.
define variable vc_filename           as character                no-undo.
define variable vc_topath             as character                no-undo.
define variable v_runproagram        as character                no-undo.
define variable vc_traceid            as character                no-undo.


 define temp-table ttSearchCondition no-undo
        field supplier_from         like Creditor.CreditorCode
        field supplier_to           like Creditor.CreditorCode
        field ponbr_from            like po_mstr.po_nbr
        field ponbr_to              like po_mstr.po_nbr
		  field site_from             like po_mstr.po_site
        field site_to               like po_mstr.po_site
        field po_type               as   character
        field po_sched              as   character
        field po_stat               as   character
        .


 define temp-table ttpodet
 
 fields  po_domain         like      po_mstr.po_domain                 
 fields  po_nbr            like      po_mstr.po_nbr                 
 fields  po_vend           like      po_mstr.po_vend                
 fields  po_ship           like      po_mstr.po_ship                
 fields  po_ord_date       like      po_mstr.po_ord_date            
 fields  po_rmks           like      po_mstr.po_rmks                
 fields  po_cr_terms       like      po_mstr.po_cr_terms            
 fields  po_buyer          like      po_mstr.po_buyer               
 fields  po_shipvia        like      po_mstr.po_shipvia             
 fields  po_fob            like      po_mstr.po_fob                 
 fields  po_bill           like      po_mstr.po_bill                                
 fields  po_stat           like      po_mstr.po_stat                
 fields  po_ap_acct        like      po_mstr.po_ap_acct             
 fields  po_ap_cc          like      po_mstr.po_ap_cc        
 fields  po_contact        like      po_mstr.po_contact
 fields  po_confirm        like      po_mstr.po_confirm                      
 fields  po_taxable        like      po_mstr.po_taxable                     
 fields  po_curr           like      po_mstr.po_curr                
 fields  po_ex_rate        like      po_mstr.po_ex_rate             
 fields  po_lang           like      po_mstr.po_lang               
 fields  po_site           like      po_mstr.po_site                
 fields  po_blanket        like      po_mstr.po_blanket               
 fields  po_contract       like      po_mstr.po_contract            
 fields  po_del_to         like      po_mstr.po_del_to              
 fields  po_due_date       like      po_mstr.po_due_date                       
 fields  po_project        like      po_mstr.po_project                      
 fields  po_type           like      po_mstr.po_type                        
 fields  po_fix_rate       like      po_mstr.po_fix_rate            
 fields  po_ent_ex         like      po_mstr.po_ent_ex              
 fields  po_tax_date       like      po_mstr.po_tax_date                        
 fields  po_pr_list        like      po_mstr.po_pr_list             
 fields  po_tax_env        like      po_mstr.po_tax_env             
 fields  po_sched          like      po_mstr.po_sched               
 fields  po_pr_list2       like      po_mstr.po_pr_list2            
 fields  po_tax_usage      like      po_mstr.po_tax_usage           
 fields  po_fix_pr         like      po_mstr.po_fix_pr                   
 fields  po_taxc           like      po_mstr.po_taxc                        
 fields  po_ap_sub         like      po_mstr.po_ap_sub                        
 fields  po_consignment    like      po_mstr.po_consignment                  
 fields  po_daybookset     like      po_mstr.po_daybookset                     
 fields  pod_nbr           like      pod_det.pod_nbr            
 fields  pod_due_date      like      pod_det.pod_due_date       
 fields  pod_line          like      pod_det.pod_line           
 fields  pod_part          as        character        
 fields  pod_qty_ord       like      pod_det.pod_qty_ord        
 fields  pod_qty_rcvd      like      pod_det.pod_qty_rcvd       
 fields  pod_pur_cost      like      pod_det.pod_pur_cost       
 fields  pod_std_cost      like      pod_det.pod_std_cost       
 fields  pod_so_job        like      pod_det.pod_so_job         
 fields  pod_qty_chg       like      pod_det.pod_qty_chg        
 fields  pod_cost_chg      like      pod_det.pod_cost_chg       
 fields  pod_bo_chg        like      pod_det.pod_bo_chg         
 fields  pod_acct          like      pod_det.pod_acct           
 fields  pod_per_date      like      pod_det.pod_per_date       
 fields  pod_type          like      pod_det.pod_type                  
 fields  pod_wo_lot        like      pod_det.pod_wo_lot         
 fields  pod_vpart         like      pod_det.pod_vpart          
 fields  pod_need          like      pod_det.pod_need           
 fields  pod_taxable       like      pod_det.pod_taxable        
 fields  pod_desc          like      pod_det.pod_desc           
 fields  pod_cc            like      pod_det.pod_cc                      
 fields  pod_um            like      pod_det.pod_um             
 fields  pod_disc_pct      like      pod_det.pod_disc_pct       
 fields  pod_req_nbr       like      pod_det.pod_req_nbr                 
 fields  pod_um_conv       like      pod_det.pod_um_conv        
 fields  pod_loc           like      pod_det.pod_loc                     
 fields  pod_op            like      pod_det.pod_op             
 fields  pod_contract      like      pod_det.pod_contract       
 fields  pod_status        like      pod_det.pod_status               
 fields  pod_req_line      like      pod_det.pod_req_line       
 fields  pod_project       like      pod_det.pod_project                       
 fields  pod_site          like      pod_det.pod_site           
 fields  pod_taxc          like      pod_det.pod_taxc           
 fields  pod_po_site       like      pod_det.pod_po_site         
 fields  pod_sched         like      pod_det.pod_sched          
 fields  pod_ord_mult      like      pod_det.pod_ord_mult       
 fields  pod_pkg_code      like      pod_det.pod_pkg_code       
 fields  pod_sch_mrp       like      pod_det.pod_sch_mrp        
 fields  pod_sch_data      like      pod_det.pod_sch_data       
 fields  pod_rlse_nbr      like      pod_det.pod_rlse_nbr       
 fields  pod_ship_weeks    like      pod_det.pod_ship_weeks     
 fields  pod_translt_days  like      pod_det.pod_translt_days   
 fields  pod_fsm_type      like      pod_det.pod_fsm_type       
 fields  pod_sd_pat        like      pod_det.pod_sd_pat         
 fields  pod_sd_time       like      pod_det.pod_sd_time        
 fields  pod_plan_days     like      pod_det.pod_plan_days      
 fields  pod_plan_mths     like      pod_det.pod_plan_mths      
 fields  pod_firm_days     like      pod_det.pod_firm_days      
 fields  pod_start_eff     as        date 
 fields  pod_end_eff       as        date       
 fields  pod_tax_usage     like      pod_det.pod_tax_usage      
 fields  pod_tax_in        like      pod_det.pod_tax_in            
 fields  pod_pr_list       like      pod_det.pod_pr_list        
 fields  pod_dock          like      pod_det.pod_dock               
 fields  pod_tax_env       like      pod_det.pod_tax_env        
 fields  pod_crt_int       like      pod_det.pod_crt_int        
 fields  pod_translt_hrs   like      pod_det.pod_translt_hrs    
 fields  pod_sftylt_days   like      pod_det.pod_sftylt_days    
 fields  pod_sftylt_hrs    like      pod_det.pod_sftylt_hrs     
 fields  pod_fix_pr        like      pod_det.pod_fix_pr                 
 fields  pod_sub_ship_date like      pod_det.pod_sub_ship_date  
 fields  pod_sub_type      like      pod_det.pod_sub_type       
 fields  pod_sub           like      pod_det.pod_sub               
 fields  pod_consignment   like      pod_det.pod_consignment    
 fields  api_status        as        character    

 index idx1 pod_nbr pod_line.

   DEFINE DATASET dsSearchCondition FOR ttSearchCondition.

   hdataset = dataset dsSearchCondition:HANDLE.   
           
   DEFINE DATASET dsSchedPo FOR ttpodet.

   hresult = dataset dsSchedPo:HANDLE.    
                

  output to /apps/eai/work/poexpt.log.
mainloop:
repeat on error undo mainloop, leave mainloop:
  
 
   /* Output and Batch Input */
   
   {us/xx/xxworkpath_e.i &outbound=YES &inbound=no &archive=YES}

assign m_outpath     = m_outpath + "po/"
       m_archpath    = m_archpath + "po/"
       m_successpath = m_successpath + "po/"
       m_errorpath   = m_errorpath + "po/"
       m_workpath    = m_workpath + "po/".


   empty temp-table ttpodet.
   
   
   /* Load SEARCH conditions from JSON  */ 
   
   vc_outputjson = replace(vc_inputjson,".json",".run.out.json").   
   run loadjsonfile(input vc_inputjson,
                    input vc_outputjson,
                    output vl_RetOK).
                    
  if vl_RetOK then do:
   
   for each ttSearchCondition .
   
   if  ttSearchCondition.ponbr_to = ""    then ttSearchCondition.ponbr_to = hi_char.
   if  ttSearchCondition.supplier_to = "" then ttSearchCondition.supplier_to = hi_char.
   if  ttSearchCondition.site_to = "" then ttSearchCondition.site_to = hi_char.
   
   for each po_mstr no-lock where (po_mstr.po_sched = logical(ttSearchCondition.po_sched)
                                  or ttSearchCondition.po_sched = "")
                              and po_mstr.po_nbr >= ttSearchCondition.ponbr_from
                              and po_mstr.po_nbr <= ttSearchCondition.ponbr_to 
                              and po_mstr.po_vend >= ttSearchCondition.supplier_from
                              and po_mstr.po_vend <= ttSearchCondition.supplier_to
							         and po_mstr.po_site >= ttSearchCondition.site_from
							         and po_mstr.po_site <= ttSearchCondition.site_to
                              and po_mstr.po_domain = global_domain,
       each pod_det no-lock where pod_det.pod_nbr = po_nbr 
                              and pod_det.pod_domain = global_domain
                              and pod_det.pod_status <> "x"
                              and pod_det.pod_status <> "c".
       create ttpodet.
       assign
         ttpodet.po_domain          =     po_mstr.po_domain                 
         ttpodet.po_nbr             =     po_mstr.po_nbr                 
         ttpodet.po_vend            =     po_mstr.po_vend                
         ttpodet.po_ship            =     po_mstr.po_ship                
         ttpodet.po_ord_date        =     po_mstr.po_ord_date            
         ttpodet.po_rmks            =     po_mstr.po_rmks                
         ttpodet.po_cr_terms        =     po_mstr.po_cr_terms            
         ttpodet.po_buyer           =     po_mstr.po_buyer               
         ttpodet.po_shipvia         =     po_mstr.po_shipvia             
         ttpodet.po_fob             =     po_mstr.po_fob                 
         ttpodet.po_bill            =     po_mstr.po_bill                                
         ttpodet.po_stat            =     po_mstr.po_stat                
         ttpodet.po_ap_acct         =     po_mstr.po_ap_acct             
         ttpodet.po_ap_cc           =     po_mstr.po_ap_cc        
         ttpodet.po_contact         =     po_mstr.po_contact
         ttpodet.po_confirm         =     po_mstr.po_confirm                      
         ttpodet.po_taxable         =     po_mstr.po_taxable                     
         ttpodet.po_curr            =     po_mstr.po_curr                
         ttpodet.po_ex_rate         =     po_mstr.po_ex_rate             
         ttpodet.po_lang            =     po_mstr.po_lang               
         ttpodet.po_site            =     po_mstr.po_site                
         ttpodet.po_blanket         =     po_mstr.po_blanket               
         ttpodet.po_contract        =     po_mstr.po_contract            
         ttpodet.po_del_to          =     po_mstr.po_del_to              
         ttpodet.po_due_date        =     po_mstr.po_due_date                       
         ttpodet.po_project         =     po_mstr.po_project                      
         ttpodet.po_type            =     po_mstr.po_type                        
         ttpodet.po_fix_rate        =     po_mstr.po_fix_rate            
         ttpodet.po_ent_ex          =     po_mstr.po_ent_ex              
         ttpodet.po_tax_date        =     po_mstr.po_tax_date                        
         ttpodet.po_pr_list         =     po_mstr.po_pr_list             
         ttpodet.po_tax_env         =     po_mstr.po_tax_env             
         ttpodet.po_sched           =     po_mstr.po_sched               
         ttpodet.po_pr_list2        =     po_mstr.po_pr_list2            
         ttpodet.po_tax_usage       =     po_mstr.po_tax_usage           
         ttpodet.po_fix_pr          =     po_mstr.po_fix_pr                   
         ttpodet.po_taxc            =     po_mstr.po_taxc                        
         ttpodet.po_ap_sub          =     po_mstr.po_ap_sub                        
         ttpodet.po_consignment     =     po_mstr.po_consignment                  
         ttpodet.po_daybookset      =     po_mstr.po_daybookset                    
         ttpodet.pod_nbr            =     pod_det.pod_nbr            
         ttpodet.pod_due_date       =     pod_det.pod_due_date       
         ttpodet.pod_line           =     pod_det.pod_line           
         ttpodet.pod_part           =     pod_det.pod_part           
         ttpodet.pod_qty_ord        =     pod_det.pod_qty_ord        
         ttpodet.pod_qty_rcvd       =     pod_det.pod_qty_rcvd       
         ttpodet.pod_pur_cost       =     pod_det.pod_pur_cost       
         ttpodet.pod_std_cost       =     pod_det.pod_std_cost       
         ttpodet.pod_so_job         =     pod_det.pod_so_job         
         ttpodet.pod_qty_chg        =     pod_det.pod_qty_chg        
         ttpodet.pod_cost_chg       =     pod_det.pod_cost_chg       
         ttpodet.pod_bo_chg         =     pod_det.pod_bo_chg         
         ttpodet.pod_acct           =     pod_det.pod_acct           
         ttpodet.pod_per_date       =     pod_det.pod_per_date       
         ttpodet.pod_type           =     pod_det.pod_type                  
         ttpodet.pod_wo_lot         =     pod_det.pod_wo_lot         
         ttpodet.pod_vpart          =     pod_det.pod_vpart          
         ttpodet.pod_need           =     pod_det.pod_need           
         ttpodet.pod_taxable        =     pod_det.pod_taxable        
         ttpodet.pod_desc           =     pod_det.pod_desc           
         ttpodet.pod_cc             =     pod_det.pod_cc                      
         ttpodet.pod_um             =     pod_det.pod_um             
         ttpodet.pod_disc_pct       =     pod_det.pod_disc_pct       
         ttpodet.pod_req_nbr        =     pod_det.pod_req_nbr                 
         ttpodet.pod_um_conv        =     pod_det.pod_um_conv        
         ttpodet.pod_loc            =     pod_det.pod_loc                     
         ttpodet.pod_op             =     pod_det.pod_op             
         ttpodet.pod_contract       =     pod_det.pod_contract       
         ttpodet.pod_status         =     pod_det.pod_status               
         ttpodet.pod_req_line       =     pod_det.pod_req_line       
         ttpodet.pod_project        =     pod_det.pod_project                       
         ttpodet.pod_site           =     pod_det.pod_site           
         ttpodet.pod_taxc           =     pod_det.pod_taxc           
         ttpodet.pod_po_site        =     pod_det.pod_po_site         
         ttpodet.pod_sched          =     pod_det.pod_sched          
         ttpodet.pod_ord_mult       =     pod_det.pod_ord_mult       
         ttpodet.pod_pkg_code       =     pod_det.pod_pkg_code       
         ttpodet.pod_sch_mrp        =     pod_det.pod_sch_mrp        
         ttpodet.pod_sch_data       =     pod_det.pod_sch_data       
         ttpodet.pod_rlse_nbr       =     pod_det.pod_rlse_nbr       
         ttpodet.pod_ship_weeks     =     pod_det.pod_ship_weeks     
         ttpodet.pod_translt_days   =     pod_det.pod_translt_days   
         ttpodet.pod_fsm_type       =     pod_det.pod_fsm_type       
         ttpodet.pod_sd_pat         =     pod_det.pod_sd_pat         
         ttpodet.pod_sd_time        =     pod_det.pod_sd_time        
         ttpodet.pod_plan_days      =     pod_det.pod_plan_days      
         ttpodet.pod_plan_mths      =     pod_det.pod_plan_mths      
         ttpodet.pod_firm_days      =     pod_det.pod_firm_days      
         ttpodet.pod_start_eff      =     pod_det.pod_start_eff[1]      
         ttpodet.pod_end_eff        =     pod_det.pod_end_eff[1]           
         ttpodet.pod_tax_usage      =     pod_det.pod_tax_usage      
         ttpodet.pod_tax_in         =     pod_det.pod_tax_in            
         ttpodet.pod_pr_list        =     pod_det.pod_pr_list        
         ttpodet.pod_dock           =     pod_det.pod_dock               
         ttpodet.pod_tax_env        =     pod_det.pod_tax_env        
         ttpodet.pod_crt_int        =     pod_det.pod_crt_int        
         ttpodet.pod_translt_hrs    =     pod_det.pod_translt_hrs    
         ttpodet.pod_sftylt_days    =     pod_det.pod_sftylt_days    
         ttpodet.pod_sftylt_hrs     =     pod_det.pod_sftylt_hrs     
         ttpodet.pod_fix_pr         =     pod_det.pod_fix_pr                 
         ttpodet.pod_sub_ship_date  =     pod_det.pod_sub_ship_date  
         ttpodet.pod_sub_type       =     pod_det.pod_sub_type       
         ttpodet.pod_sub            =     pod_det.pod_sub               
         ttpodet.api_status            =    "SUCCESS"             
         ttpodet.pod_consignment    =     pod_det.pod_consignment.    

        export ttpodet.
        if ttpodet.pod_part = ""then ttpodet.pod_part = " ".
    put ttpodet.pod_part  ttpodet.pod_qty_ord skip.
                      
     end.  /*  for each po_mstr no-lock  */                                     
   end.  /*  for each for each ttSearchCondition . */                                     
  end.  /* if vl_RetOK then do: */ 
                    
         /* Create output json */                   
         run writejsonfile(input hresult,
                  input vc_outputjson,
                  input "FILE",
                  input True,
                  input "UTF-8",
                  output vl_RetOK,
                  output vc_errorstring).
                  
       do vi_filecount = 1 to 5:
          /* when success move cim log file to archive directory  */
          /* when failed move cim log file to error directory  */   
          /*  move status json file to out directory for API return */   
          /* when success move previous step .p and json file to archive directory  */
          /* when failed move previous step .p and json file to error directory  */       
          case vi_filecount:
      
          when 1 then
          assign vc_filename = replace(vc_inputjson,".json",".p")
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 2 then
          assign vc_filename = vc_inputjson
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 3 then
          assign vc_filename = replace(vc_inputjson,".json",".dat")
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 4 then
          assign vc_filename = replace(vc_inputjson,".json",".run.log")
                 vc_topath   = m_outpath.
          when 5 then
          assign vc_filename = replace(vc_inputjson,".json",".run.out.json")
                 vc_topath   =  m_outpath.
          end case.
          
         if vl_RetOK then 
         put unformatted vc_filename " " skip
         vc_topath " " skip 
         vi_filecount skip.
     
        
          
          run cimfilehandle(input vc_filename,
                            input vc_topath,
                            input no ).                 
                   
          
     
       end.       /* do vi_filecount = 1 to 5: */        
      
   
   
   leave.
end. /* repeat on error undo mainloop, leave mainloop: */
